/* -*- c -*- */
/*****************************************************************************/
/*  LibreDWG - free implementation of the DWG file format                    */
/*                                                                           */
/*  Copyright (C) 2018 Free Software Foundation, Inc.                        */
/*                                                                           */
/*  This library is free software, licensed under the terms of the GNU       */
/*  General Public License as published by the Free Software Foundation,     */
/*  either version 3 of the License, or (at your option) any later version.  */
/*  You should have received a copy of the GNU General Public License        */
/*  along with this program.  If not, see <http://www.gnu.org/licenses/>.    */
/*****************************************************************************/

/*
 * common.c: common programs functions. included, not linked.
 * written by Reini Urban
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* returns number of consumed args */
int verbosity(int argc, char **argv, int i, unsigned int *opts)
{
  unsigned int loglevel = 2;
  char log_str[4];
  if (!strcmp(argv[i], "--verbose") || // --verbose 2 or --verbose
      !strcmp(argv[i], "-v")) // -v 0 or -v
    {
      int num_args;
      if (argc > i)
        {
          long l = strtol(argv[i+1], NULL, 10);
          if (l < 0 || l > 10)
            {
              printf("Invalid verbosity %s\n", argv[i+1]); // -vbla
              exit(help());
            }
          loglevel = (unsigned int)l;
          num_args = 2;
        }
      else
        {
          num_args = 1;
          loglevel = 2;
        }
      *opts = loglevel;
      sprintf(log_str, "%d", loglevel);
#if defined(USE_TRACING) && defined(HAVE_SETENV)
      setenv("LIBREDWG_TRACE", log_str, 1);
#endif
      return num_args;
    }

  if (!strncmp(argv[i], "-v", 2)) // -v0
    {
      char *opt = argv[i];
      long l = strtol(&opt[2], NULL, 10);
      if (l < 0 || l > 10)
        {
          printf("Invalid verbosity %s\n", opt); // -vbla
          exit(help());
        }
      loglevel = (unsigned int)l;
      *opts = loglevel;
      sprintf(log_str, "%d", loglevel);
#if defined(USE_TRACING) && defined(HAVE_SETENV)
      setenv("LIBREDWG_TRACE", log_str, 1);
#endif
      return 1;
    }

  printf("Invalid verbosity %s\n", argv[i]); // -vbla
  exit(1);
}

